<?php

namespace CHOMP\CRUDSGIBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity (repositoryClass="CHOMP\CRUDSGIBundle\Entity\IncidenteRepository")
 * @ORM\Table(name="incidente")
 */
class Incidente
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=40, nullable=false)
	 * @Assert\NotBlank(
	 *       message = "El título no puede estar vacío."
	 *		)
	 * @Assert\Length(
     *      min = "4",
     *      max = "40",
	 *      minMessage = "El nombre debe tener al menos {{ limit }} caracteres.",
     *      maxMessage = "El nombre debe tener {{ limit }} caracteres como máximo."
	 *		)
     */
    protected $titulo;

    /**
     * @ORM\Column(type="datetime", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $fechaCreacion;

    /**
     * @ORM\Column(type="datetime", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $fechaModificacion;

    /**
     * @ORM\Column(type="datetime", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $fechaLimiteSLA;
	
    /**
     * @ORM\Column(type="datetime", nullable=null)
     */	
	protected $fechaCierreAutomatico;

    /**
     * @ORM\Column(type="datetime", nullable=true)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */	
	protected $fechaCierre;
	
	 /**
     * @ORM\ManyToOne(targetEntity="Estado")
	 * @ORM\JoinColumn(name="estado_id", referencedColumnName="id", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $estado;
  
  	 /**
     * @ORM\ManyToOne(targetEntity="Prioridad")
	 * @ORM\JoinColumn(name="prioridad_id", referencedColumnName="id", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $prioridad;

	 /**
     * @ORM\ManyToOne(targetEntity="Empresa")
	 * @ORM\JoinColumn(name="empresa_id", referencedColumnName="id", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $empresa;
	
	 /**
     * @ORM\ManyToOne(targetEntity="CuentaAnalitica")
	 * @ORM\JoinColumn(name="cuentaAnalitica_id", referencedColumnName="id", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $cuentaAnalitica;
	
	/**
     * @ORM\ManyToOne(targetEntity="Usuario")
	 * @ORM\JoinColumn(name="creador_id", referencedColumnName="id", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $creador;
	
	/**
     * @ORM\ManyToOne(targetEntity="Usuario")
	 * @ORM\JoinColumn(name="responsableSoporte_id", referencedColumnName="id", nullable=true)
     */
	protected $responsableSoporte;
	
	/**
     * @ORM\ManyToOne(targetEntity="Usuario")
	 * @ORM\JoinColumn(name="responsableCliente_id", referencedColumnName="id", nullable=false)
     */
	protected $responsableCliente;
  
	 /**
     * @ORM\ManyToOne(targetEntity="GrupoSoporte")
	 * @ORM\JoinColumn(name="grupoSoporte_id", referencedColumnName="id", nullable=false)
	 * @Assert\NotNull(message = "El campo no puede estar en blanco.")
     */
	protected $grupoSoporte;
	
	/**
     * @ORM\OneToMany(targetEntity="Comentario", mappedBy="incidente")
     */
	protected $comentarios;

	/**
     * @ORM\OneToMany(targetEntity="Timesheet", mappedBy="incidente")
     * 
	 */
    private $timesheets;
	
	
	
	/**********************************
     * __construct
     *
     * 
     **********************************/		
	function __construct()
	{ 
		 $this->comentarios = new ArrayCollection();	
		 $this->timesheets = new ArrayCollection();
		 //Poner la fecha de creación
   	} 
	
    /**********************************
     * __toString()
     *
     * Este método sirve para poder popular los comboboxes en los forms.
     *********************************/ 
	 public function __toString()
	{
		return $this->getTitulo();
	}	
	
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set titulo
     *
     * @param string $titulo
     * @return Incidente
     */
    public function setTitulo($titulo)
    {
        $this->titulo = $titulo;
    
        return $this;
    }

    /**
     * Get titulo
     *
     * @return string 
     */
    public function getTitulo()
    {
        return $this->titulo;
    }

    /**
     * Set fechaCreacion
     *
     * @param \DateTime $fechaCreacion
     * @return Incidente
     */
    public function setFechaCreacion($fechaCreacion)
    {
        $this->fechaCreacion = $fechaCreacion;
    
        return $this;
    }

    /**
     * Get fechaCreacion
     *
     * @return \DateTime 
     */
    public function getFechaCreacion()
    {
        return $this->fechaCreacion;
    }

    /**
     * Set fechaModificacion
     *
     * @param \DateTime $fechaModificacion
     * @return Incidente
     */
    public function setFechaModificacion($fechaModificacion)
    {
        $this->fechaModificacion = $fechaModificacion;
    
        return $this;
    }

    /**
     * Get fechaModificacion
     *
     * @return \DateTime 
     */
    public function getFechaModificacion()
    {
        return $this->fechaModificacion;
    }

    /**
     * Set fechaLimiteSLA
     *
     * @param \DateTime $fechaLimiteSLA
     * @return Incidente
     */
    public function setFechaLimiteSLA($fechaLimiteSLA)
    {
        $this->fechaLimiteSLA = $fechaLimiteSLA;
    
        return $this;
    }

    /**
     * Get fechaLimiteSLA
     *
     * @return \DateTime 
     */
    public function getFechaLimiteSLA()
    {
        return $this->fechaLimiteSLA;
    }

    /**
     * Set fechaCierreAutomatico
     *
     * @param \DateTime $fechaCierreAutomatico
     * @return Incidente
     */
    public function setFechaCierreAutomatico($fechaCierreAutomatico)
    {
        $this->fechaCierreAutomatico = $fechaCierreAutomatico;
    
        return $this;
    }

    /**
     * Get fechaCierreAutomatico
     *
     * @return \DateTime 
     */
    public function getFechaCierreAutomatico()
    {
        return $this->fechaCierreAutomatico;
    }

    /**
     * Set fechaCierre
     *
     * @param \DateTime $fechaCierre
     * @return Incidente
     */
    public function setFechaCierre($fechaCierre)
    {
        $this->fechaCierre = $fechaCierre;
    
        return $this;
    }

    /**
     * Get fechaCierre
     *
     * @return \DateTime 
     */
    public function getFechaCierre()
    {
        return $this->fechaCierre;
    }

    /**
     * Set estado
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Estado $estado
     * @return Incidente
     */
    public function setEstado(\CHOMP\CRUDSGIBundle\Entity\Estado $estado)
    {
        $this->estado = $estado;
    
        return $this;
    }

    /**
     * Get estado
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Estado 
     */
    public function getEstado()
    {
        return $this->estado;
    }

    /**
     * Set prioridad
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Prioridad $prioridad
     * @return Incidente
     */
    public function setPrioridad(\CHOMP\CRUDSGIBundle\Entity\Prioridad $prioridad)
    {
        $this->prioridad = $prioridad;
    
        return $this;
    }

    /**
     * Get prioridad
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Prioridad 
     */
    public function getPrioridad()
    {
        return $this->prioridad;
    }

    /**
     * Set empresa
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Empresa $empresa
     * @return Incidente
     */
    public function setEmpresa(\CHOMP\CRUDSGIBundle\Entity\Empresa $empresa)
    {
        $this->empresa = $empresa;
    
        return $this;
    }

    /**
     * Get empresa
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Empresa 
     */
    public function getEmpresa()
    {
        return $this->empresa;
    }

    /**
     * Set cuentaAnalitica
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\CuentaAnalitica $cuentaAnalitica
     * @return Incidente
     */
    public function setCuentaAnalitica(\CHOMP\CRUDSGIBundle\Entity\CuentaAnalitica $cuentaAnalitica)
    {
        $this->cuentaAnalitica = $cuentaAnalitica;
    
        return $this;
    }

    /**
     * Get cuentaAnalitica
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\CuentaAnalitica 
     */
    public function getCuentaAnalitica()
    {
        return $this->cuentaAnalitica;
    }

    /**
     * Set creador
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Usuario $creador
     * @return Incidente
     */
    public function setCreador(\CHOMP\CRUDSGIBundle\Entity\Usuario $creador)
    {
        $this->creador = $creador;
    
        return $this;
    }

    /**
     * Get creador
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Usuario 
     */
    public function getCreador()
    {
        return $this->creador;
    }

    /**
     * Set responsableSoporte
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Usuario $responsableSoporte
     * @return Incidente
     */
    public function setResponsableSoporte(\CHOMP\CRUDSGIBundle\Entity\Usuario $responsableSoporte)
    {
        $this->responsableSoporte = $responsableSoporte;
    
        return $this;
    }

    /**
     * Get responsableSoporte
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Usuario 
     */
    public function getResponsableSoporte()
    {
        return $this->responsableSoporte;
    }

    /**
     * Set responsableCliente
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Usuario $responsableCliente
     * @return Incidente
     */
    public function setResponsableCliente(\CHOMP\CRUDSGIBundle\Entity\Usuario $responsableCliente)
    {
        $this->responsableCliente = $responsableCliente;
    
        return $this;
    }

    /**
     * Get responsableCliente
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Usuario 
     */
    public function getResponsableCliente()
    {
        return $this->responsableCliente;
    }

    /**
     * Set grupoSoporte
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\GrupoSoporte $grupoSoporte
     * @return Incidente
     */
    public function setGrupoSoporte(\CHOMP\CRUDSGIBundle\Entity\GrupoSoporte $grupoSoporte)
    {
        $this->grupoSoporte = $grupoSoporte;
    
        return $this;
    }

    /**
     * Get grupoSoporte
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\GrupoSoporte 
     */
    public function getGrupoSoporte()
    {
        return $this->grupoSoporte;
    }

    /**
     * Add comentarios
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Comentario $comentarios
     * @return Incidente
     */
    public function addComentario(\CHOMP\CRUDSGIBundle\Entity\Comentario $comentarios)
    {
        $this->comentarios[] = $comentarios;
    
        return $this;
    }

    /**
     * Remove comentarios
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Comentario $comentarios
     */
    public function removeComentario(\CHOMP\CRUDSGIBundle\Entity\Comentario $comentarios)
    {
        $this->comentarios->removeElement($comentarios);
    }

    /**
     * Get comentarios
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getComentarios()
    {
        return $this->comentarios;
    }

    /**
     * Set timesheet
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Timesheet $timesheet
     * @return Incidente
     */
    public function setTimesheet(\CHOMP\CRUDSGIBundle\Entity\Timesheet $timesheet = null)
    {
        $this->timesheet = $timesheet;
    
        return $this;
    }

    /**
     * Get timesheet
     *
     * @return \CHOMP\CRUDSGIBundle\Entity\Timesheet 
     */
    public function getTimesheet()
    {
        return $this->timesheet;
    }

    /**
     * Add timesheets
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Timesheet $timesheets
     * @return Incidente
     */
    public function addTimesheet(\CHOMP\CRUDSGIBundle\Entity\Timesheet $timesheets)
    {
        $this->timesheets[] = $timesheets;
    
        return $this;
    }

    /**
     * Remove timesheets
     *
     * @param \CHOMP\CRUDSGIBundle\Entity\Timesheet $timesheets
     */
    public function removeTimesheet(\CHOMP\CRUDSGIBundle\Entity\Timesheet $timesheets)
    {
        $this->timesheets->removeElement($timesheets);
    }

    /**
     * Get timesheets
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getTimesheets()
    {
        return $this->timesheets;
    }
}